package br.com.datasun.biblioteca.business;

import java.util.List;

import br.com.datasun.biblioteca.dao.CategoriaDAO;
import br.com.datasun.biblioteca.entities.Categoria;
import br.com.datasun.biblioteca.exceptions.BusinessException;
import br.com.datasun.biblioteca.exceptions.CategoriaJaExistenteException;
import br.com.datasun.biblioteca.exceptions.CategoriaSemNomeException;
import br.com.datasun.biblioteca.exceptions.DAOException;

public class CategoriaBO {

	private CategoriaDAO categoriaDAO = new CategoriaDAO();
 	public List<Categoria> listarTodas() throws BusinessException{		
		try{
			return categoriaDAO.listarTodasCategorias();						
		}catch (DAOException e) {
			e.printStackTrace();
			throw new BusinessException("Problemas ao Listar Assuntos");			
		}
	}
 	
 	public Categoria inserir(Categoria categoria) throws CategoriaSemNomeException, CategoriaJaExistenteException, BusinessException, NullPointerException {		
		try{
			if (categoria == null){
				throw new NullPointerException("Categoria não informada!");
			}else if (categoria.getNome().equals("")){
				throw new CategoriaSemNomeException("Nome da Categoria não Informado!");
			}else if(categoriaDAO.existeCategoriaComONome(categoria.getNome(),categoria.getId())){
				throw new CategoriaJaExistenteException("Já existe uma categoria com o nome informado!");
			}else return categoriaDAO.inserir(categoria);
			
		}catch (DAOException e) {
			e.printStackTrace();
			throw new BusinessException("Problemas ao Incluir Categoria");
		}
	} 	
 	
	public Categoria atualizar(Categoria categoria) throws CategoriaSemNomeException, CategoriaJaExistenteException, BusinessException, NullPointerException{		
		try{
			if (categoria == null){
				throw new NullPointerException("Categoria não informada!");
			}else if (categoria.getNome().trim().equals("")){
				throw new CategoriaSemNomeException("Nome da Categoria não informado!");
			}else if (categoriaDAO.existeCategoriaComONome(categoria.getNome(), categoria.getId())){
				throw new CategoriaJaExistenteException("Já Existe uma categoria com o nome informado!");
			}else{
				categoriaDAO.atualizarCategoria(categoria);
				return categoria;
			}
			
		}catch (DAOException e) {
			e.printStackTrace();
			throw new BusinessException("Problemas ao Atualizar Categoria!");
		}
	}
	
	public boolean excluir(Categoria categoria) throws BusinessException{
		try{
			return categoriaDAO.excluirCategoriaPorId(categoria.getId());									
		}catch (DAOException e) {
			throw new BusinessException("Problemas ao Excluir Categoria");
		}
	} 	
}
